SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[paActualizarNormasDeNomina]
-- <DESCRIPCION> Actualiza la norma de la Nomina de Altas y Bajas que se va a imprimir.
-- <CONSIDERACIONES ESPECIALES> 
-- <TABLAS> tb_ServiciosAgentes, tb_SubServiciosAgentes, tb_ColaDeMovimientos, tb_SituacionRevista, tb_Organizaciones
-- <ACTUALIZACIONES> 18 - 05 - 2006 por OTERO, Javier (se rehace por completo el procedimiento)
-- <ACTUALIZACIONES> 19 - 07 - 2006 por OTERO, Javier (Actualizacion agregando 1 dia a la Fecha de Baja )
-- <ACTUALIZACIONES> 24 - 08 - 2006 por OTERO, Javier (Asignacion automatica de norma)
-- <ACTUALIZACIONES> 11 - 12 - 2006 por OTERO, Javier (Actualización de servicios según las organizaciones del usuario en tb_RelUsuarioOrganizacion)
-- <ACTUALIZACIONES> 13 - 03 - 2007 por SANES,  jorge (Actualización para Interinos, no tener en cuenta todos los servicios solo lo de las fechas)
-- <ACTUALIZACIONES> 06 - 10 - 2008 por SANES,  jorge y OTERO, Marcelo  (Se cambio Where para que tome Servicios que tienen una Reubicacion y cambiaron su CUPOF)

-- Actualizado en DB
-- 19-07-2006 - Jorge Sanes
-- 18-10-2006 - Jorge Sanes
-- 11-12-2006 - Javier Otero
-- 13/03/2007 - Jorge Sanes
-- 06/10/2008 - Jorge Sanes 

@cuise INT,
@cuiseh INT,
@situacionrevista VARCHAR(50),
@fechaalta VARCHAR(10),
@fechabaja VARCHAR(10),
@norma VARCHAR(50) OUTPUT 

AS
SET NOCOUNT ON
SET DATEFORMAT DMY

DECLARE @error INT
DECLARE @idNorma INT
DECLARE @Usuario INT

SELECT @Usuario = IdUsuario FROM tb_Usuarios WHERE  NTUser = USER_NAME()

-- SE CREA LA NORMA
INSERT tb_Normas
SELECT CONVERT(VARCHAR, UltimaNorma) +'-'+ CONVERT(VARCHAR, YEAR(GETDATE())), 1, 0, NULL, GETDATE(), NULL, 16, 0, @Usuario FROM tb_MovimientosDocentes WHERE Mnemo = 'T'
SELECT @IdNorma = @@IDENTITY

-- SE ACTUALIZA LA ULTIMA NORMA
UPDATE tb_MovimientosDocentes SET UltimaNorma = UltimaNorma + 1 WHERE Mnemo = 'T'

-- ///////////////////////////////////////////
-- //SE ACTUALIZAN LAS NORMAS DE BAJA
-- ///////////////////////////////////////////
UPDATE SA Set sa.NormaBaja = @IdNorma
FROM tb_ServiciosAgentes SA INNER JOIN tb_SubserviciosAgentes SSA ON SA.IdServicioAgente = SSA.ServicioAgente
INNER JOIN tb_Organizaciones O ON O.IdOrganizaciones = SA.UbicacionOrig
INNER JOIN tb_SituacionRevista SR ON SR.IdSituacionRevista = SA.SituacionRevista
INNER JOIN tb_Agentes ON tb_Agentes.IdAgente = Agente
INNER JOIN tb_Afiliaciones AF ON AF.IdAgente = tb_Agentes.IdAgente AND Organismo = 1 AND AF.NumeroAfiliado <> tb_Agentes.Documento
LEFT OUTER JOIN tb_Normas N ON N.IdNorma = SA.NormaAlta
LEFT OUTER JOIN tb_Normas N2 ON N2.IdNorma = SA.NormaBaja
INNER JOIN tb_Usuarios U ON U.NTUser = SYSTEM_USER
INNER JOIN tb_RelUsuarioOrganizacion UO ON U.IdUsuario = UO.idUsuario AND Sa.UbicacionOrig = UO.IdOrganizacion
WHERE 
(SA.CausaAlta NOT IN(4, 8, 9, 11) OR SA.CausaAlta IS NULL) AND
(SA.CausaBaja NOT IN(7, 8, 10) OR SA.CausaBaja IS NULL) AND
(O.Cuise >= @cuise AND O.Cuise <= @cuiseh AND SR.Descripcion = @situacionrevista) 

AND

((SA.FechaAlta < @fechaalta AND SA.FechaBaja IS NOT NULL AND DATEADD(DAY,1,SA.FechaBaja)  >= @FechaAlta AND DATEADD(DAY, 1, SA.FechaBaja)  <= @FechaBaja ) OR
(SA.FechaAlta >= @FechaAlta AND  SA.FechaBaja IS NOT NULL AND DATEADD(DAY, 1, SA.FechaBaja)  >= @FechaAlta AND DATEADD(DAY, 1, SA.FechaBaja)  <= @FechaBaja) OR
 (( (SA.FechaBaja IS NULL or DATEADD(DAY,1,SA.FechaBaja) > @FechaBaja) and ((SA.FechaAlta >= @FechaAlta AND SA.FechaAlta <= @FechaBaja) OR (UPPER(@SituacionRevista) <> 'INTERINO'  AND SA.FechaAlta <@FechaAlta)))) )
-- Se agrego control sobre Interinos - Revisar - 13/03/2007
-- (( (SA.FechaBaja IS NULL or DATEADD(DAY,1,SA.FechaBaja) > @FechaBaja) and ((SA.FechaAlta >= @FechaAlta AND SA.FechaAlta <= @FechaBaja) OR SA.FechaAlta <@FechaAlta))) )

AND SA.NormaBaja IS NULL AND SA.FechaBaja IS NOT NULL

-- ///////////////////////////////////////////
-- //SE ACTUALIZAN LAS NORMAS DE ALTA
-- ///////////////////////////////////////////
UPDATE SA Set sa.NormaAlta = @IdNorma
FROM tb_ServiciosAgentes SA INNER JOIN tb_SubserviciosAgentes SSA ON SA.IdServicioAgente = SSA.ServicioAgente
INNER JOIN tb_Organizaciones O ON O.IdOrganizaciones = SA.UbicacionOrig
INNER JOIN tb_SituacionRevista SR ON SR.IdSituacionRevista = SA.SituacionRevista
INNER JOIN tb_Agentes ON tb_Agentes.IdAgente = Agente
INNER JOIN tb_Afiliaciones AF ON AF.IdAgente = tb_Agentes.IdAgente AND Organismo = 1 AND AF.NumeroAfiliado <> tb_Agentes.Documento
LEFT OUTER JOIN tb_Normas N ON N.IdNorma = SA.NormaAlta
LEFT OUTER JOIN tb_Normas N2 ON N2.IdNorma = SA.NormaBaja
INNER JOIN tb_Usuarios U ON U.NTUser = SYSTEM_USER
INNER JOIN tb_RelUsuarioOrganizacion UO ON U.IdUsuario = UO.idUsuario AND Sa.UbicacionOrig = UO.IdOrganizacion
WHERE 
(SA.CausaAlta NOT IN(4, 8, 9, 11) OR SA.CausaAlta IS NULL) AND
(SA.CausaBaja NOT IN(7, 8, 10) OR SA.CausaBaja IS NULL) AND
(O.Cuise >= @cuise AND O.Cuise <= @cuiseh AND SR.Descripcion = @situacionrevista) 

AND

((SA.FechaAlta < @fechaalta AND SA.FechaBaja IS NOT NULL AND DATEADD(DAY, 1, SA.FechaBaja)  >= @FechaAlta AND DATEADD(DAY, 1, SA.FechaBaja)  <= @FechaBaja ) OR
  (SA.FechaAlta >= @FechaAlta AND  SA.FechaBaja IS NOT NULL AND DATEADD(DAY, 1, SA.FechaBaja)  >= @FechaAlta AND DATEADD(DAY, 1, SA.FechaBaja)  <= @FechaBaja) OR
  (( (SA.FechaBaja IS NULL or DATEADD(DAY, 1, SA.FechaBaja) > @FechaBaja) and ((SA.FechaAlta >= @FechaAlta AND SA.FechaAlta <= @FechaBaja) OR (UPPER(@SituacionRevista) <> 'INTERINO'  AND SA.FechaAlta <@FechaAlta)))) )
-- Se agrego control sobre Interinos - Revisar - 13/03/2007
--  (( (SA.FechaBaja IS NULL or DATEADD(DAY, 1, SA.FechaBaja) > @FechaBaja) and ((SA.FechaAlta >= @FechaAlta AND SA.FechaAlta <= @FechaBaja) OR SA.FechaAlta <@FechaAlta))) )

AND SA.NormaAlta IS NULL

-- ///////////////////////////////////////////
-- //SE ACTUALIZAN LAS CONTINUIDADES
-- ///////////////////////////////////////////
UPDATE CM Set CM.NormaContinuidad = @IdNorma
	FROM tb_ServiciosAgentes SA INNER JOIN tb_SubserviciosAgentes SSA ON SA.IdServicioAgente = SSA.ServicioAgente
		INNER JOIN tb_Organizaciones O ON O.IdOrganizaciones = SA.UbicacionOrig
		INNER JOIN tb_SituacionRevista SR ON SR.IdSituacionRevista = SA.SituacionRevista
		INNER JOIN tb_SubServiciosAgentes SS ON SS.ServicioAgente = SA.IdServicioAgente
		INNER JOIN tb_Agentes ON tb_Agentes.IdAgente = SA.Agente
		INNER JOIN tb_Afiliaciones AF ON AF.IdAgente = tb_Agentes.IdAgente AND Organismo = 1 AND AF.NumeroAfiliado <> tb_Agentes.Documento
		INNER JOIN vw_ColaDeMovimientosDocentes CM ON CM.IdPlaza = SS.Plaza AND CM.Agente = SA.Agente AND MONTH(Fecha1) = MONTH(@FechaAlta) AND YEAR(Fecha1) = YEAR(@FechaAlta)
		LEFT OUTER JOIN tb_Normas N ON N.IdNorma = SA.NormaAlta
		LEFT OUTER JOIN tb_Normas N2 ON N2.IdNorma = SA.NormaBaja
		INNER JOIN tb_Usuarios U ON U.NTUser = SYSTEM_USER
		INNER JOIN tb_RelUsuarioOrganizacion UO ON U.IdUsuario = UO.idUsuario AND Sa.UbicacionOrig = UO.IdOrganizacion
	WHERE 
		(SA.CausaAlta NOT IN(4, 8, 9, 11) OR SA.CausaAlta IS NULL) AND
		(SA.CausaBaja NOT IN(7, 8, 10) OR SA.CausaBaja IS NULL) AND
		(O.Cuise >= @cuise AND O.Cuise <= @cuiseh AND SR.Descripcion = @situacionrevista) 

		AND

		((SA.FechaAlta < @fechaalta AND SA.FechaBaja IS NOT NULL AND DATEADD(DAY, 1, SA.FechaBaja)  >= @FechaAlta AND DATEADD(DAY, 1, SA.FechaBaja)  <= @FechaBaja ) OR
		    (SA.FechaAlta >= @FechaAlta AND  SA.FechaBaja IS NOT NULL AND DATEADD(DAY, 1, SA.FechaBaja)  >= @FechaAlta AND DATEADD(DAY, 1, SA.FechaBaja)  <= @FechaBaja) OR
		    (( (SA.FechaBaja IS NULL or DATEADD(DAY, 1, SA.FechaBaja) > @FechaBaja) and ((SA.FechaAlta >= @FechaAlta AND SA.FechaAlta <= @FechaBaja) OR (UPPER(@SituacionRevista) <> 'INTERINO'  AND SA.FechaAlta <@FechaAlta)))) )

		--   Se agrego control sobre Interinos - Revisar - 13/03/2007
		--    (( (SA.FechaBaja IS NULL or DATEADD(DAY, 1, SA.FechaBaja) > @FechaBaja) and ((SA.FechaAlta >= @FechaAlta AND SA.FechaAlta <= @FechaBaja) OR SA.FechaAlta <@FechaAlta))) )

		-- Se cambio este where para que tome Servicios que tienen reubicacion (06/10/2008)
		--AND SS.FechaAlta = SA.FechaAlta
		AND ((SA.FechaBaja IS NULL AND SSA.FechaBaja IS NULL ) OR (SA.FechaBaja IS NOT NULL AND SSA.FechaBaja = SA.FechaBaja))

		AND CM.NormaContinuidad IS NULL  AND SA.NormaAlta IS NOT NULL

SELECT @Norma = Descripcion FROM tb_Normas WHERE IdNorma = @IdNorma
GO
GRANT EXECUTE ON  [dbo].[paActualizarNormasDeNomina] TO [CentroDeDesignaciones]
GRANT EXECUTE ON  [dbo].[paActualizarNormasDeNomina] TO [PersonalDocente]
GO
